#include <Arduino.h>
#include <OneButton.h>
#include <FastLED.h>

#define LED_PIN 12     // led引脚
#define NUM_LED 12     // LED数量
#define Button_PIN1 5  // 按钮1引脚
#define Button_PIN2 23 // 按钮1引脚
const int irPin = 2;   // 红外接收模块连接的GPIO引脚

CRGB leds[NUM_LED];
OneButton button1(Button_PIN1, true);
OneButton button2(Button_PIN2, true);

unsigned char flag1 = 0;
unsigned char flagALL = 0;

void click1()
{
  // Serial.println("click");
  flag1 = flag1 + 1;
  if (flag1 == 4)
  {
    flag1 = 0;
  }
  // Serial.println("button1");
}
void click2()
{
  flagALL = !flagALL;
  // Serial.println("button2");
}

void setup()
{

  Serial.begin(9600);  // TFT
  Serial2.begin(9600); // LD3320A

  button1.reset(); // 清除一下按钮状态机的状态
  button1.attachClick(click1);
  button2.reset(); // 清除一下按钮状态机的状态
  button2.attachClick(click2);

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LED);

  pinMode(irPin, INPUT_PULLUP); // 设置红外接收引脚为输入模式，并启用内部上拉电阻
}

void loop()
{

  int irState = digitalRead(irPin); // 读取红外接收引脚的状态

  button1.tick();
  button2.tick();
  delay(10);

  if (flagALL == 1)
  {
    if (flag1 == 1)
    {
      for (int i = 0; i < NUM_LED; i++)
      {
        FastLED.setBrightness(128);    // 设置亮度（可选）
        leds[i] = CRGB(177, 202, 255); // 设置LED颜色
        FastLED.show();                // 更新LED显示
      }
      Serial.println("mode1");
    }
    else if (flag1 == 2)
    {
      for (int i = 0; i < NUM_LED; i++)
      {
        FastLED.setBrightness(128);   // 设置亮度（可选）
        leds[i] = CRGB(255, 157, 63); // 设置LED颜色
        FastLED.show();               // 更新LED显示
      }
      Serial.println("mode2");
    }

    else if (flag1 == 3)
    {
      for (int i = 0; i < NUM_LED; i++)
      {
        FastLED.setBrightness(255);    // 设置亮度（可选）
        leds[i] = CRGB(255, 255, 255); // 设置LED颜色
        FastLED.show();                // 更新LED显示
      }
      Serial.println("mode3");
    }

    else if (flag1 == 0)
    {
      for (int i = 0; i < NUM_LED; i++)
      {

        FastLED.setBrightness(0); // 设置亮度（可选）
        leds[i] = CRGB(0, 0, 0);  // 设置LED颜色
        FastLED.show();           // 更新LED显示
        Serial.println("mode0");
      }
    }
    
    if (Serial2.available() > 0)
    {

      char incomingByte = Serial2.read();

      if (incomingByte == '3')
      {
        flag1 = 3;
         Serial.println("open");
        for (int i = 0; i < NUM_LED; i++)
        {
          FastLED.setBrightness(255);    // 设置亮度（可选）
          leds[i] = CRGB(255, 255, 255); // 设置LED颜色
          FastLED.show();                // 更新LED显示
        }
      }
      else if (incomingByte == '4')
      {
        flag1 = 0;
        for (int i = 0; i < NUM_LED; i++)
        {
          FastLED.setBrightness(0); // 设置亮度（可选）
          leds[i] = CRGB(0, 0, 0);  // 设置LED颜色
          FastLED.show();           // 更新LED显示
        }
      }
    }

    if (irState == HIGH) // 如果红外接收引脚为高电平（距离内没有照射到东西）
    {
      for (int i = 0; i < NUM_LED; i++)
      {
        FastLED.setBrightness(0); // 设置亮度（可选）
        leds[i] = CRGB(0, 0, 0);  // 设置LED颜色
        FastLED.show();           // 更新LED显示
      }
      flagALL = 0;
    }
    else
    {
      flagALL = 1;
    }
  }
}
